1
管理容器增長:大小與容量
AI037Lesson 14
00:00

在 C++ 中,管理容器的增長是一場在以下兩者之間的建築性協調 大小 (目前元素)和 容量 (預留記憶體)。對於連續容器如 vector 以及 string,達到容量時會觸發 重新配置:系統會尋找更大的記憶體區塊,將所有元素移動至新區塊,並銷毀舊區塊。這是一個耗時的 $O(n)$ 操作,會導致 迭代器失效——你對舊元素的指標會變成「懸空」且危險。

1. 擴展策略

為避免頻繁的重新配置, vector 實作會分配「緩衝」空間。使用 c.reserve(n) 指令可明確設定最小容量而不新增元素,而 c.shrink_to_fit() 則是向作業系統請求釋放多餘記憶體的非強制性要求。

2. resize 與 reserve 的差異

雖然 reserve 僅影響緩衝區, resize(n) 卻會主動改變容器的邏輯。透過 resize 縮小會刪除元素,而擴展則會加入預設初始化的值。

大小(已使用)額外容量總容量
⚠️ 警告: 如果 resize 縮小容器,指向被刪除元素的迭代器會失效。若擴展導致重新配置, 所有 所有迭代器都會失效。
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>